<?php namespace Common\Model;
use Hdphp\Model\Model;
class Category extends Model{
	protected $table = 'category';
//	自动完成
	protected $validate = array(
		//array(字段名,验证方法,错误信息,验证条件,验证时间)
//		分类名不能为空
		array('cname','required','分类名不能为空',3,3),
		array('cname','maxlen:20','分类名不能超过20个字符',3,3),
//		排序范围
		array('csort','num:0,65535','排序范围：0~65535',3,3),
	);
//	自动完成
	protected $auto = array(
		array('addtime','time','function',3,1),
	);
//	添加分类
	public function store(){
		if($this->create()){
//			$this->add()返回一个自增主键的值
			return $this->add();
		}else{
			return FALSE;
		}
	}
//	添加子分类
	public function addSon(){
		if($this->create()){
			
			return $this->add();
		}else{
			return false;
		}
	}
	
//	编辑分类
	public function edit(){
		$cid = Q('get.cid',0,'intval');
		if($this->create()){
			$this->where("cid = {$cid}")->save();
			return true;
		}else{
			return false;
		}
	}
	
//	获得自己的所有子集
	public function getSon($data,$cid){
		$temp = array();
		foreach ($data as $v) {
			if($v['pid'] == $cid){
				$temp[] = $v['cid'];
//				递归
				$temp = array_merge($temp,$this->getSon($data, $v['cid']));
			}
		}
		return $temp;
	}
	
//	获得除了自己及自己的所有子集的集合
	public function getNoMy($cid){
//		1.获得自己的子集
		$cids = $this->getSon($this->get(), $cid);
//		2，压入自己
		$cids[] = $cid;
//		获得所有非自己和自己子集的值
		$data = $this->where("cid NOT IN(".implode(',', $cids).")")->get();
//		树状化
		$data = Data::tree($data,'cname','cid','pid');
		return $data;
	}
	
//	获得父集
	public function getParents($data,$pid){
		$temp = array();
		foreach ($data as $k => $v) {
			if($v['cid'] == $pid){
				$temp[] = $v['cid'];
//				递归
				$temp = array_merge($temp,$this->getParents($data, $v['pid']));
			}
		}
		return $temp;
	}
	
//	获得父集分类栏目
	public function getParName($cid){
//		获得所有分类数据
		$cateData = $this->get();
//		获得该元素的pid
		$pid = $this->where("cid = {$cid}")->pluck("pid");
//		获得所有的父集栏目
		$pcids = $this->getParents($cateData,$pid);
//		数组倒转，对数据进行顺序处理
		$pcids = array_reverse($pcids);
//		压入自己
		$pcids[] = $cid;
//		查出栏目信息
		$pData = $this->where("cid IN(".implode(',', $pcids).")")->field('cname,cid')->get();
//		返出数据
		return $pData;
	}
	
//	获得子集分类栏目
	public function getSonName($cid){
//  	获得所有分类数据
		$cate = $this->get();
//		获得自己和自己的子集
		$cids = $this->getSon($cate,$cid);
		$cids[] = $cid;
//		获得自己和自己的子集的所有栏目
		$cateData = $this->where("cid IN(".implode(',', $cids).")")->get();
		foreach ($cateData as $k => $v) {
			$ccids = $this->getSon($cate,$v['cid']);
	//		压入自己
			$ccids[] = $v['cid'];
			$cateData[$k]['num'] = Db::table('goods')->where("category_cid IN(".implode(',', $ccids).")")->count();
		}
		$cData = Data::channelLevel($cateData, $pid = $cid, $html = "&nbsp;", $fieldPri = 'cid', $fieldPid = 'pid', $level = 1);
		return $cData;
	}
	
	
	
	
	
	
	
	
	
	
	
}
 ?>